# @Filename:    dtype
# @Author:      王佳伟
# @Time:        2025-03-27 22:05
# @Describe:    dtype 数据类型对象
import numpy as np

'''
数据类型对象描述了对应于数组的固定内存块的解释，取决于以下方面：

数据类型（整数、浮点或者 Python 对象）

数据大小

字节序（小端或大端）

在结构化类型的情况下，字段的名称，每个字段的数据类型，和每个字段占用的内存块部分。

如果数据类型是子序列，它的形状和数据类型。
'''

# 使用数组标量类型
dt = np.dtype(np.int32)
print(dt)

print("--------------------")

# int8，int16，int32，int64 可替换为等价的字符串 'i1'，'i2'，'i4'，以及其他。
dt = np.dtype('i4')
print(dt)

print("--------------------")

# 使用端记号
dt = np.dtype('>i4')
print(dt)

print("--------------------")

# 下面的例子展示了结构化数据类型的使用。 这里声明了字段名称和相应的标量数据类型。
dt = np.dtype([('age', np.int8)])
print(dt)

print("--------------------")

# 现在将其应用于ndarray对象
dt = np.dtype([('age', np.int8)])
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a)

print("--------------------")

# 文件名称可用于访问age列的内容
dt = np.dtype([('age', np.int8)])
a = np.array([(10,), (20,), (30,)], dtype=dt)
print(a['age'])

print("--------------------")

# 以下示例定义名为 student 的结构化数据类型，其中包含字符串字段name，整数字段age和浮点字段marks。 此dtype应用于ndarray对象
student = np.dtype([('name', 'S20'), ('age', 'i1'), ('marks', 'f4')])
print(student)

print("--------------------")

# 将其应用于ndarray对象
student = np.dtype([('name', 'S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50), ('xyz', 18, 75)], dtype=student)
print(a)

'''
'b'：布尔值

'i'：符号整数

'u'：无符号整数

'f'：浮点

'c'：复数浮点

'm'：时间间隔

'M'：日期时间

'O'：Python 对象

'S', 'a'：字节串

'U'：Unicode

'V'：原始数据（void）
'''